package cn.kgc.springbootdemo.service;


import cn.hutool.json.JSONObject;
import cn.kgc.springbootdemo.entity.User;
import cn.kgc.springbootdemo.form.LoginForm;
import cn.kgc.springbootdemo.form.RegisterUserForm;
import cn.kgc.springbootdemo.form.UpdateUserForm;
import cn.kgc.springbootdemo.form.UserPageForm;
import cn.kgc.springbootdemo.util.R;
import cn.kgc.springbootdemo.vo.UserLoginVO;
import cn.kgc.springbootdemo.vo.UserVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;


public interface UserService extends IService<User> {



    /**
     *  校验用户账号是否存在
     *
     * @param userCode 用户账号
     * @return 结果
     */
    R<Boolean> checkUserCode(String userCode);


    /**
     * 通过用户ID查询用户信息
     *
     * @param userID
     * @return
     */
    User findByUserID(String userID);

    /**
     * 通过用户账号查询用户信息
     *
     * @param userCode
     * @return
     */
    User findByUserCode(String userCode);


    /**
     * 登录验证
     *
     * @param response
     * @param login 登录对象
     * @return
     */
    JSONObject login(HttpServletRequest request, HttpServletResponse response, LoginForm login);

    /**
     *  退出登录
     *
     * @return
     */
    Boolean signOut();


    /**
     * 注册
     * @param registerUserForm 注册对象表单
     * @return 注册成功true  失败false
     */
    Boolean register(HttpServletRequest request,RegisterUserForm registerUserForm);


    /**
     * 修改密码
     * @param updateUserForm 修改密码表单对象
     * @return 注册成功true  失败false
     */
    Boolean updateUserPassword(UpdateUserForm updateUserForm);

    /**
     * 删除账号
     * @param id
     * @return 删除成功true  失败false
     */
    Boolean deleteUser(String id);

    /**
     * 分页用户查询
     * @param userPageForm 分页查询对象
     * @return 查询结果集合
     */
    IPage<UserVO> selectUsersByLimit(UserPageForm userPageForm);

    /**
     *  查询用户登录信息
     *
     * @param id 用户Id
     * @return
     */
    UserLoginVO getUserLoginInfoById(String id);

}
